%module OgreEntity

%{
#include "OGRE/OgreEntity.h"
	%}

%import "OgrePrerequisites.i"
%import "OgreMesh.i"
%import "OgreMovableObject.i"
%import "OgreCommon.i"

%import "OgreString.i"

%import "OgreQuaternion.i"
%import "OgreVector3.i"

 /*
#include "OgreHardwareBufferManager.h"
#include "OgreMesh.h"
#include "OgreRenderable.h"
#include "OgreResourceGroupManager.h"
 */

namespace Ogre {

	%nodefaultctor Entity;
	 %nodefaultdtor Entity;
	 class Entity : public MovableObject//, public Resource::Listener
	 {
	 public:
//		typedef map<String, MovableObject*>::type ChildObjectList;
		 
		 const MeshPtr& getMesh(void) const;
		 
//		SubEntity* getSubEntity(unsigned int index) const;

//		SubEntity* getSubEntity( const String& name ) const;

//		unsigned int getNumSubEntities(void) const;

		Entity* clone( const String& newName ) const;

		void setMaterialName( const String& name, const String& groupName = ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME );

//		void setMaterial(const MaterialPtr& material);

//		const AxisAlignedBox& getBoundingBox(void) const;

//		AxisAlignedBox getChildObjectsBoundingBox(void) const;

//		const String& getMovableType(void) const;

//		AnimationState* getAnimationState(const String& name) const;

//		AnimationStateSet* getAllAnimationStates(void) const;

		void setDisplaySkeleton(bool display);

		bool getDisplaySkeleton(void) const;

		Entity* getManualLodLevel(size_t index) const;

		size_t getNumManualLodLevels(void) const;

		ushort getCurrentLodIndex();

		void setMeshLodBias(Real factor, ushort maxDetailIndex = 0, ushort minDetailIndex = 99);

		void setMaterialLodBias(Real factor, ushort maxDetailIndex = 0, ushort minDetailIndex = 99);

//		const AxisAlignedBox& getWorldBoundingBox(bool derive = false) const;

//		const Sphere& getWorldBoundingSphere(bool derive = false) const;

		bool isHardwareAnimationEnabled(void);

	};

	class EntityFactory //: public MovableObjectFactory
	{
		static String FACTORY_TYPE_NAME;

		const String& getType(void) const;
		void destroyInstance( MovableObject* obj);

	};
} // namespace
